<?php
/**
 * Ttserver缓存日志读写类
 * @name    CacheTtserver
 * @version	1.0.1
 */
class CacheTtserverLog {

	/**
	 * 获取间隔时间点
	 * @param  string $dt        要获取的时间，单位为秒
	 * @return int    返回时间点. 
	 */
	public static function fetRange($dt=0) {
		$dt = !empty($dt)?$dt:time();
		return ceil($dt/TtserverConfig::TTSERVER_LOG_RATE);
	}

	/**
	 * 写日志
	 * @param  resource $conn    缓存端链接
	 * @param  resource $value   缓存的value
	 * @return mixed    如果成功缓存则返回true，否则返回false. 
	 */
	public static function writeLog($conn,$value) {
		$rate = CacheTtserverLog::fetRange();
		$key = TtserverConfig::TTSERVER_LOG_PREF.$rate;
		$conn->add($key, 0, TtserverConfig::TTSERVER_LOG_LIFETIME);
		$key2 = $key.$conn->increment($key);
		//echo $key.'--'.$key2.'<br>';
		return $conn->write($key2
			,$value,TtserverConfig::TTSERVER_LOG_LIFETIME);
	}

	/**
	 * 读取时间点所在间隔段内的日志
	 * @param  resource $conn    缓存端链接
	 * @param  resource $time    要获取的时间点，单位为秒
	 * @return mixed    成功返回时间段内的value，
	 *    如果结果不存在、过期或者在获取的过程中发生错误，将会返回false.
	 */
	public function readLog($conn,$time) {
		$rate = CacheTtserverLog::fetRange($time);
		$key = TtserverConfig::TTSERVER_LOG_PREF.$rate;
		$id = $conn->readIncrement($key);
		if(false === $id) return false;
		$a = array();
		for($i=1;$i<=$id;$i++) {
			$a[] = $key.$i;
		}
		//print_r($a);
		return $conn->read($a);
	}

	/**
	 * 读取时间范围内所有间隔段内的日志
	 * @param  resource $conn    缓存端链接
	 * @param  resource $sdt     开始时间点，单位为秒
	 * @param  resource $edt     结束时间点，单位为秒
	 * @return mixed    成功返回时间段内的value，
	 *    如果结果不存在、过期或者在获取的过程中发生错误，将会返回false.
	 */
	public function readLogRange($conn,$sdt,$edt) {
		$sRate = CacheTtserverLog::fetRange($sdt);
		$eRate = CacheTtserverLog::fetRange($edt);
		$b = array();
		for($j=$sRate;$j<=$eRate;$j++) {
			$rate = $j;
			$key = TtserverConfig::TTSERVER_LOG_PREF.$rate;
			echo $key.'<br>';
			$id = $conn->readIncrement($key);
			if(false === $id) continue;
			$a = array();
			for($i=1;$i<=$id;$i++) {
				$a[] = $key.$i;
			}
			$b[$rate] = $conn->read($a);
		}
		//print_r($a);
		return $b;
	}
}

/*
require_once('Ttserver.config.php');
require_once('CacheTtserver.class.php');
require_once('CacheTtserverLog.class.php');
$mem = new CacheTtserver();
$aLog = array('logs'=>array('a'=>1,'b'=>'abv123','c'=>array('a','b')));
CacheTtserverLog::writeLog($mem,$aLog);
$dt = time();
$r = CacheTtserverLog::readLog($mem,$dt);
print_r($r);
$r = CacheTtserverLog::readLogRange($mem,$dt-30,$dt+30);
print_r($r);
*/

?>